// src/main/java/com/bookmanager/service/UserService.java
package com.bookmanager.service;

import com.bookmanager.dao.UserDAO;
import com.bookmanager.model.User;

import java.util.ArrayList;
import java.util.List;

public class UserService {
    private UserDAO userDAO = new UserDAO();

    public User login(String userId, String password) {
        return userDAO.login(userId, password);
    }

    public User getUserById(String userId) {
        return userDAO.getUserById(userId);
    }

    public List<User> getAllUsers() {
        return userDAO.getAllUsers();
    }

    public String register(User user, String confirmPassword) {
        // 验证密码一致性
        if (!user.getPassword().equals(confirmPassword)) {
            return "密码不一致";
        }

        // 验证密码长度
        if (user.getPassword().length() < 6) {
            return "密码长度至少6位";
        }

        // 检查用户ID是否已存在
        if (userDAO.getUserById(user.getUserId()) != null) {
            return "用户ID已存在";
        }

        // 注册用户
        if (userDAO.registerUser(user)) {
            return "success";
        } else {
            return "注册失败，请重试";
        }
    }

    public String updateUser(User user, String newPassword) {
        // 验证用户是否存在
        User existingUser = userDAO.getUserById(user.getUserId());
        if (existingUser == null) {
            return "用户不存在";
        }

        // 如果提供了新密码，验证密码长度
        if (newPassword != null && !newPassword.trim().isEmpty()) {
            if (newPassword.length() < 6) {
                return "密码长度至少6位";
            }
            user.setPassword(newPassword);
        } else {
            // 不更新密码，保持原密码
            user.setPassword(null);
        }

        // 更新用户信息
        if (userDAO.updateUser(user)) {
            return "success";
        } else {
            return "更新失败，请重试";
        }
    }

    public String resetPassword(String userId, String newPassword) {
        // 验证用户是否存在
        User user = userDAO.getUserById(userId);
        if (user == null) {
            return "用户不存在";
        }

        // 验证密码长度
        if (newPassword.length() < 6) {
            return "密码长度至少6位";
        }

        // 重置密码
        if (userDAO.resetPassword(userId, newPassword)) {
            return "success";
        } else {
            return "重置密码失败，请重试";
        }
    }

    // 搜索用户
    public List<User> searchUsers(String keyword) {
        if (keyword == null || keyword.trim().isEmpty()) {
            return userDAO.getAllUsers(); // 如果关键词为空，返回所有用户
        }
        return userDAO.searchUsers(keyword.trim());
    }

    // 更新用户角色
    public boolean updateUserRole(String userId, String newRole) {
        // 调用DAO层方法更新用户角色
        return userDAO.updateUserRole(userId, newRole);
    }

    /**
     * 删除用户
     * @param userId 用户ID
     * @param currentUserId 当前操作的管理员ID（防止删除自己）
     * @return 删除结果信息
     */
    public String deleteUser(String userId, String currentUserId) {
        // 验证不能删除自己
        if (userId.equals(currentUserId)) {
            return "不能删除自己的账户";
        }

        // 验证用户是否存在
        User user = userDAO.getUserById(userId);
        if (user == null) {
            return "用户不存在";
        }

        // 检查用户是否有关联数据
        if (userDAO.hasRelatedData(userId)) {
            return "该用户有未归还的图书或收藏记录，无法删除";
        }

        // 执行删除操作
        if (userDAO.deleteUser(userId)) {
            return "success";
        } else {
            return "删除失败，请重试";
        }
    }

    /**
     * 强制删除用户（删除所有关联数据）
     * @param userId 用户ID
     * @param currentUserId 当前操作的管理员ID
     * @return 删除结果信息
     */
    public String forceDeleteUser(String userId, String currentUserId) {
        // 验证不能删除自己
        if (userId.equals(currentUserId)) {
            return "不能删除自己的账户";
        }

        // 验证用户是否存在
        User user = userDAO.getUserById(userId);
        if (user == null) {
            return "用户不存在";
        }

        // 这里可以添加删除关联数据的逻辑
        // 例如：删除借阅记录、收藏记录等
        // deleteUserRelatedData(userId);

        // 执行删除操作
        if (userDAO.deleteUser(userId)) {
            return "success";
        } else {
            return "删除失败，请重试";
        }
    }
}